package com.cskaoyan.javase.oop1._13block._2building;

/**
 * 总结一下到目前为止，创建对象过程中可能碰到的结构的执行顺序：
 * new对象过程中，各种结构的执行顺序：
 *
 * 对象结构存在后就进行默认初始化，所有成员变量都具有默认值后，再开始其余赋值操作
 * 找到new对象的那个构造器，
 * 如果它的首行显式地调用了另一个构造器
 * （注：显式调用构造器目前指的是this调用自身构造器，其它场景这里先不考虑，比如super）
 * 那么程序会先跳转到那个构造器，但是不会立刻执行，而是：
 * 按照类中构造代码块和显式赋值的代码书写顺序，从上到下执行其中的代码，执行完毕后：
 * 跳转回this或者super执行的构造器，执行完毕后：
 * 最终跳转回new对象构造器，执行完毕后，创建对象结束
 * 如果它的首行没有显式调用另一个构造器
 *
 * 那么会先从上到下执行构造代码块和显式赋值代码，执行完毕后：
 * 跳转回new对象构造器，执行完毕后，创建对象结束
 *
 * 最后,强调一下,基础打好,后面也能学得懂
 *
 * @since 10:29
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
    public static void main(String[] args) {
        Star s = new Star("杨幂", 39);
        System.out.println(s.age);
        System.out.println(s.name);
    }
}

class Star {
    String name = "刘亦菲";
    int age = 18;

    {
        age = 28;
        name = "杨超越";
    }

    public Star(String name) {
        this.name = name;
    }

    public Star(String name, int age) {
        this(name);
        this.age = age;
    }

}
